
import moment from 'moment'
import Base64 from 'crypto-js/enc-base64';


// var keyStr = "ABCDEFGHIJKLMNOP" +
//   "QRSTUVWXYZabcdef" +
//   "ghijklmnopqrstuv" +
//   "wxyz0123456789+/" +
//   "=";

// function encode64(input) {
//   input = escape(input);
//   var output = "";
//   var chr1, chr2, chr3 = "";
//   var enc1, enc2, enc3, enc4 = "";
//   var i = 0;

//   do {
//     chr1 = input.charCodeAt(i++);
//     chr2 = input.charCodeAt(i++);
//     chr3 = input.charCodeAt(i++);

//     enc1 = chr1 >> 2;
//     enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
//     enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
//     enc4 = chr3 & 63;

//     if (isNaN(chr2)) {
//       enc3 = enc4 = 64;
//     } else if (isNaN(chr3)) {
//       enc4 = 64;
//     }

//     output = output +
//       keyStr.charAt(enc1) +
//       keyStr.charAt(enc2) +
//       keyStr.charAt(enc3) +
//       keyStr.charAt(enc4);
//     chr1 = chr2 = chr3 = "";
//     enc1 = enc2 = enc3 = enc4 = "";
//   } while (i < input.length);

//   return output;
// }

// function decode64(input) {
//   var output = "";
//   var chr1, chr2, chr3 = "";
//   var enc1, enc2, enc3, enc4 = "";
//   var i = 0;

//   // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
//   var base64test = /[^A-Za-z0-9\+\/\=]/g;
//   if (base64test.exec(input)) {
//     alert("There were invalid base64 characters in the input text.\n" +
//       "Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\n" +
//       "Expect errors in decoding.");
//   }
//   input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

//   do {
//     enc1 = keyStr.indexOf(input.charAt(i++));
//     enc2 = keyStr.indexOf(input.charAt(i++));
//     enc3 = keyStr.indexOf(input.charAt(i++));
//     enc4 = keyStr.indexOf(input.charAt(i++));

//     chr1 = (enc1 << 2) | (enc2 >> 4);
//     chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
//     chr3 = ((enc3 & 3) << 6) | enc4;

//     output = output + String.fromCharCode(chr1);

//     if (enc3 != 64) {
//       output = output + String.fromCharCode(chr2);
//     }
//     if (enc4 != 64) {
//       output = output + String.fromCharCode(chr3);
//     }

//     chr1 = chr2 = chr3 = "";
//     enc1 = enc2 = enc3 = enc4 = "";

//   } while (i < input.length);

//   return unescape(output);
// }


// 图片流转base64
const transformBufferToBase64 = (buffer) => {
  buffer = new Uint8Array(buffer).reduce((data, byte) => data + String.fromCharCode(byte), '')
  const prefix = 'data:image/jpeg;base64,'
  if (btoa) {
    return prefix + btoa(buffer)
  } else {
    return prefix + Base64.encode(buffer)
  }
}

// 时间戳转字符串 2018-01-01 01：01：01
const transformTimeStampToString = (timeStamp) => {
  if (typeof timeStamp !== 'number' ) return timeStamp
  function add0(a) {
    return a < 10 ? '0' + a : a
  }
  var time = new Date(timeStamp);
  var y = time.getFullYear();
  var m = time.getMonth() + 1;
  var d = time.getDate();
  var h = time.getHours();
  var mm = time.getMinutes();
  var s = time.getSeconds();
  return y + '-' + add0(m) + '-' + add0(d) + ' ' + add0(h) + ':' + add0(mm) + ':' + add0(s);
}

// 枚举代码转中文
const getEnumDesc = (enums, data) => {
  if (Array.isArray(enums)) {
    const { desc } = enums.find(({ index }) => data === index) || {}
    return desc || data
  } else return data
}

// 选取对象一些属性返回新对象
const pick = (obj, arr) =>
  arr.reduce((iter, val) => (val in obj && (iter[val] = obj[val]), iter), {})

const getStartTime = (date) => {
  if (date && date._isAMomentObject) {
    date = moment(date).hour(0).minute(0).second(0)
  }
  return date
}

const getEndTime = (date) => {
  if (date && date._isAMomentObject) {
    date = moment(date).hour(23).minute(59).second(59)
  }
  return date
}

const compareStartEndTime = (startTime, endTime) => {
  if (startTime && endTime) {
    return moment(startTime).isBefore(moment(endTime))
  }
  return true
}

const formatDate = (date) => (format) => moment.isMoment(date) ? moment(date).format(format) : date

const formatDay = (date) => formatDate(date)('YYYY-MM-DD')

const formatMonth = (date) => formatDate(date)('YYYY-MM')

export default {
  transformBufferToBase64,
  transformTimeStampToString,
  getEnumDesc,
  pick,
  getStartTime,
  getEndTime,
  compareStartEndTime,
  formatDay,
  formatMonth
}